class Watcher {
    constructor(vm, key, cb) {
        this.vm = vm
        // data中的属性名
        this.key = key
        // 回调函数负责更新视图
        this.cb = cb

        // 将Watcher对象记录到Dep的静态属性target中
        Dep.target = this
        // 触发get方法 在get方法中调用addSub（在observer中已经实现了）
        this.oldValue = vm[key] // 在这里访问vm[key] 某个属性就是访问observer的get方法

        Dep.target = null  // 防止target重复初始化
    }

    // 当数据发生变化的时候更新视图
    update() {
        let newValue = this.vm[this.key]
        if(this.oldValue === newValue) return
        this.cb(newValue)
    }
}